package com.nbcio.pm.service;

import com.nbcio.common.mybatis.core.page.PageQuery;
import com.nbcio.common.mybatis.core.page.TableDataInfo;
import com.nbcio.pm.domain.bo.PmProjectDocumentBo;
import com.nbcio.pm.domain.vo.PmProjectDocumentVo;
import org.springframework.web.multipart.MultipartFile;

import java.util.Collection;
import java.util.List;

/**
 * 项目文档Service接口
 *
 * @author nbacheng
 */
public interface IPmProjectDocumentService {

    /**
     * 查询项目文档
     */
    PmProjectDocumentVo queryById(Long docId);

    /**
     * 查询项目文档列表
     */
    TableDataInfo<PmProjectDocumentVo> queryPageList(PmProjectDocumentBo bo, PageQuery pageQuery);

    /**
     * 查询项目文档列表（不分页）
     */
    List<PmProjectDocumentVo> queryList(PmProjectDocumentBo bo);

    /**
     * 查询文档树结构
     */
    List<PmProjectDocumentVo> queryDocumentTree(Long projectId, Long parentId);

    /**
     * 新增项目文档
     */
    Boolean insertByBo(PmProjectDocumentBo bo);

    /**
     * 修改项目文档
     */
    Boolean updateByBo(PmProjectDocumentBo bo);

    /**
     * 校验并批量删除项目文档信息
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);

    /**
     * 上传文件
     */
    PmProjectDocumentVo uploadFile(MultipartFile file, Long projectId, Long taskId, Long parentId, String docName, Boolean isPublic);

    /**
     * 创建文件夹
     */
    PmProjectDocumentVo createFolder(Long projectId, Long taskId, Long parentId, String folderName, Boolean isPublic);

    /**
     * 下载文件
     */
    void downloadFile(Long docId);

    /**
     * 更新下载次数
     */
    Boolean updateDownloadCount(Long docId);

    /**
     * 移动文档
     */
    Boolean moveDocument(Long docId, Long newParentId);

    /**
     * 复制文档
     */
    PmProjectDocumentVo copyDocument(Long docId, Long newParentId);

    /**
     * 重命名文档
     */
    Boolean renameDocument(Long docId, String newName);

    /**
     * 获取文档路径
     */
    String getDocumentPath(Long docId);
}
